home *** CD-ROM | disk | FTP | other *** search
/ ASME's Mechanical Engine…ing Toolkit 1997 December / ASME's Mechanical Engineering Toolkit 1997 December.iso / c_lang / varinc.lzh / ORDENTRY.C < prev    next >
Text File  |  1979-11-30  |  3KB  |  68 lines

  1. /* SOURCE FILE: ORDENTRY.C */
  2. /*****************************************************************************/
  3. /* The main() function for the Software Vendor Order-Entry Program. Each     */
  4. /*   case commands a significant step in order entry, such as prompting for  */
  5. /*   a screen of data or sending order data to a file.                       */
  6. /* The action after the completion of a step will be one of the following:   */
  7. /*   Cancel the order.                                                       */
  8. /*   Back up to the previous step.                                           */
  9. /*   Go on to the next step.                                                 */
  10. /* The action is controlled by the user's use of special command characters  */
  11. /*   that are described further in the header file projutil.h.               */
  12. /*****************************************************************************/
  13.  
  14. #include <stddefs.h>                   /* needed for GLOBAL, IMPORT, and YES */
  15. #include "projutil.h"   /* needed for prompt() symbols STEPOK, STEPBACK, and */
  16.                          /*   STEPCANC, and synonym type stepcode            */
  17.  
  18. /* Declare data shared among functions in all source files (GLOBAL). */
  19. GLOBAL bflag bell_ok = YES;                         /* It's OK to ring bell. */
  20.  
  21. main()
  22.    {
  23.  
  24.    /* Declare subfunction return and parameter types. */
  25.    IMPORT stepcode id_user(void), id_cust(stepcode);
  26.    IMPORT stepcode ord_itms(stepcode), ship_pay(stepcode);
  27.    IMPORT stepcode wrt_ord(void);
  28.    short step;
  29.    stepcode step_rtn;     /* step_rtn is the return value from a step. It is */
  30.                           /* passed to the next step. It may equal:          */
  31.                           /*   STEPOK    Step complete; go on to next step.  */
  32.                           /*   STEPBACK  Back up to closest previous step.   */
  33.                           /*   STEPCANC  Cancel order entry (quit).          */
  34.  
  35.    enum prompts {ID_USER, ID_CUST, ORD_ITMS, SHIP_PAY, WRT_ORD,
  36.       ENDSTEPS};
  37.  
  38.    for (step = 0, step_rtn = STEPOK; step != (short) ENDSTEPS &&
  39.       step_rtn != STEPCANC; )
  40.       {
  41.       switch (step)
  42.          {
  43.          case ID_USER:                       /* Identify user (salesperson). */
  44.             step_rtn = id_user();
  45.             break;
  46.          case ID_CUST:                                 /* Identify customer. */
  47.             step_rtn = id_cust(step_rtn);
  48.             break;
  49.          case ORD_ITMS:                         /* Input order detail items. */
  50.             step_rtn = ord_itms(step_rtn);
  51.             break;
  52.          case SHIP_PAY:              /* Input shipping info, tax, pay terms. */
  53.             step_rtn = ship_pay(step_rtn);
  54.             break;
  55.          case WRT_ORD:                         /* Write order; update files. */
  56.             step_rtn = wrt_ord();
  57.             break;
  58.          }
  59.  
  60.       /* Determine next step based on return from last one. */
  61.       if (step_rtn == STEPOK)                   /* Was last step successful? */
  62.          ++step;                                 /* Yes; go on to next step. */
  63.       else if (step_rtn == STEPBACK && step > 0)  
  64.          --step;                            /* No; back up to previous step. */
  65.       }
  66.    }
  67.  
  68.